package main

import "fmt"

func main() {
	//浮点型
	//分为单精度浮点型float32 有效位数为7位 7位之前
	//分为双精度浮点型float64 有效位数位15位
	//关于float32/64在源码当中的定义取值范围
	//const (
	//	MaxFloat32             = 0x1p127 * (1 + (1 - 0x1p-23)) // 3.40282346638528859811704183484516925440e+38
	//	SmallestNonzeroFloat32 = 0x1p-126 * 0x1p-23            // 1.401298464324817070923729583289916131280e-45
	//
	//	MaxFloat64             = 0x1p1023 * (1 + (1 - 0x1p-52)) // 1.79769313486231570814527423731704356798070e+308
	//	SmallestNonzeroFloat64 = 0x1p-1022 * 0x1p-52            // 4.9406564584124654417656879286822137236505980e-324

	//math.MaxFloat32 单精度浮点型最大值
	//math.MaxFloat64 双精度浮点型最大值
	//math.SmallestNonzeroFloat32 单精度浮点型最小值
	//math.SmallestNonzeroFloat64 双精度浮点型最小值

	//float类型的运算方式
	a := 3.140
	fmt.Printf("%T\n", a)    //result-->float64，%T自动推导类型
	fmt.Printf("%f\n", a)    //result-->3.145000  %f 默认保留六位小数
	fmt.Printf("%.2f\n", a)  //result-->3.15  %.2f进行四舍五入，并保留2位
	fmt.Printf("%.10f\n", a) //result-->3.1400000000  %.10f进行四舍五入，并保留10位

	//科学计数法
	b := 3.14e-0
	c := 3.14e-01
	d := 3.14e-2
	//...
	fmt.Println(b) //result-->3.14
	fmt.Println(c) //result-->0.314往前负一位
	fmt.Println(d) //result-->0.0314往前负两位
	//-------%f进行保留后面小数----------//
	fmt.Printf("%.1f\n", b) //以小数点往后进行保留----result--->3.1
	fmt.Printf("%.1f\n", c) //以小数点往后进行保留----result--->0.3
	fmt.Printf("%.1f\n", d) //以小数点往后进行保留----result--->0.0
	fmt.Printf("%f\n", d)   //以小数点往后进行保留默认六位----result--->0.031400

	//...
	//以科学计数法打印浮点型数据
	e := 0.0314
	fmt.Printf("%e\n", e) //result---> 3.140000e-02
	fmt.Printf("%E\n", e) //result--> 3.140000E-02

}
